package com.goldsign.pay.common.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 
 * @author xiaoxianwen
 *
 */
public class Md5 {
	    private final static char[] HEXDIGITS = { '0', '1', '2', '3', '4', '5',  
	            '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; 
	    private static int BIT16 = 16;
	    private static int BIT32 = 32;
	    
	    private static String bytesToHex(byte[] bytes) {  
	        StringBuffer sb = new StringBuffer();  
	        int t;  
	        for (int i = 0; i < BIT16; i++) {  
	            t = bytes[i];  
	            if (t < 0) { 
	                t += 256;  
	            }
	            sb.append(HEXDIGITS[(t >>> 4)]);  
	            sb.append(HEXDIGITS[(t % 16)]);  
	        }  
	        return sb.toString();  
	    }  
	    /**
	     * 32位加密
	     * @param input
	     * @return
	     * @throws Exception
	     */
	    public static String md5_32(String input) throws Exception {  
	        return code(input, BIT32);  
	    }
	    /**
	     * 16位加密
	     * @param input
	     * @return
	     * @throws Exception
	     */
	    public static String md5_16(String input) throws Exception{
	    	return code(input,BIT16);
	    }
	    public static String code(String input, int bit) throws Exception {  
	        try {  
	            MessageDigest md = MessageDigest.getInstance(System.getProperty(  
	                    "MD5.algorithm", "MD5"));  
	            if (bit == BIT16) { 
	                return bytesToHex(md.digest(input.getBytes("utf-8")))  
	                        .substring(8, 24);  
	            }
	            return bytesToHex(md.digest(input.getBytes("utf-8")));  
	        } catch (NoSuchAlgorithmException e) {  
	              
	            throw new Exception("Could not found MD5 algorithm.", e);  
	        }  
	    }  
	    public static String md5_3(String b) throws Exception{  
	        MessageDigest md = MessageDigest.getInstance(System.getProperty(  
	                "MD5.algorithm", "MD5"));  
	        byte[] a = md.digest(b.getBytes());  
	        a = md.digest(a);  
	        a = md.digest(a);  
	          
	        return bytesToHex(a);  
	    }  
	    
	    public static void  main(String[] rags){
	    	try {
//				SysLog.info(md5_32("123456"));
//				SysLog.info(md5_16("123456"));
			} catch (Exception e) {
				// TODO Auto-generated catch block
				
			}
	    }
	}  



